home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / program / recio215.zip / REMSG.C < prev    next >
C/C++ Source or Header  |  1996-10-26  |  3KB  |  109 lines

  1. /*****************************************************************************
  2.    MODULE: remsg.c
  3.   PURPOSE: recio simple error message functions
  4. COPYRIGHT: (C) 1994-1996, William Pierpoint
  5.  COMPILER: Borland C Version 3.1
  6.        OS: MSDOS Version 6.2
  7.   VERSION: 2.15
  8.   RELEASE: October 26, 1996
  9. *****************************************************************************/
  10.  
  11. #include <errno.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. #include "recio.h"
  17.  
  18. /****************************************************************************/
  19. static void                  /* returns nothing                             */
  20.      errmsg(                 /* errno callback error message function       */
  21.         void)                /* no arguments                                */
  22. /****************************************************************************/
  23. {
  24.   switch (errno) {
  25.  
  26.   /* non-fatal errors */
  27.   case EACCES:   /* file access permission denied */
  28.   case EDOM:     /* out of domain */
  29.   case EMFILE:   /* too many files open */
  30.   case ERANGE:   /* out of range */
  31.     fputs("\nERROR -- ", stderr);
  32.     fputs(strerror(errno), stderr);
  33.     fputc('\n', stderr);
  34.     break;
  35.  
  36.   /* fatal errors */
  37.   case EINVAL:   /* invalid argument */
  38.   case ENOMEM:   /* out of memory    */
  39.   default:       /* unknown error    */
  40.     fputs("\nFATAL ERROR -- ", stderr);
  41.     fputs(strerror(errno), stderr);
  42.     fputc('\n', stderr);
  43.     exit(EXIT_FAILURE);
  44.     break;
  45.   }
  46. }
  47.  
  48. /****************************************************************************/
  49. void                         /* returns nothing                             */
  50.     rerrmsg(                 /* recio callback error message function       */
  51.         REC *rp)             /* record pointer                              */
  52. /****************************************************************************/
  53. {
  54.   if (risvalid(rp)) {
  55.   
  56.     rsetfldch(recerr, ' ');
  57.     rsettxtch(recerr, ' ');
  58.   
  59.     /* if reof indicator set */
  60.     if (reof(rp)) {
  61.       rputs(recerr, "\nERROR in");
  62.       rputs(recerr, rnames(rp));
  63.       rputs(recerr, "-- tried to read past end of file\n");
  64.     
  65.     /* else rerror indicator set */
  66.     } else {
  67.  
  68.       /* determine cause of error */
  69.       switch (rerror(rp)) {
  70.  
  71.       /* data errors */
  72.       case R_EDOM:     /* out of domain */
  73.       case R_ERANGE:   /* out of range */
  74.       case R_EINVDAT:  /* invalid data */
  75.       case R_EMISDAT:  /* missing data */
  76.       case R_ENOPUT:   /* unable to write data */
  77.         rputs(recerr, "\nDATA ERROR in");
  78.         rputs(recerr, rnames(rp));
  79.         rputs(recerr, "at record");
  80.         rputul(recerr, rrecno(rp));
  81.         rputs(recerr, "and field");
  82.         rputui(recerr, rfldno(rp));
  83.         rputs(recerr, "--");
  84.         rputs(recerr, rerrstr(rp));
  85.         rputrec(recerr);
  86.         break;
  87.         
  88.       /* fatal errors */
  89.       case R_EINVAL:   /* invalid argument */
  90.       case R_EINVMOD:  /* invalid mode  */
  91.       case R_ENOMEM:   /* out of memory */
  92.       case R_ENOGET:   /* record too long */
  93.       default:         /* unknown error */
  94.         rputs(recerr, "\nFATAL ERROR in");
  95.         rputs(recerr, rnames(rp));
  96.         rputs(recerr, "--");
  97.         rputs(recerr, rerrstr(rp));
  98.         rputrec(recerr);
  99.         exit(EXIT_FAILURE);
  100.         break;
  101.       }
  102.     }
  103.   
  104.   /* invalid record pointer */
  105.   } else {
  106.     errmsg();
  107.   }
  108. }
  109.